﻿using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Pulsar.Test.Soyuz.ProgramacionesWS;
using System.Net;
using System.IO;
using System.Web.Script.Serialization;



namespace Pulsar.Test
{
    /// <summary>
    /// Descripción resumida de UnitTest1
    /// </summary>
    [TestClass]
    public class UnitTest1
    {

        //Testeo Listar todo programacion SOYUZ
        [TestMethod]
        public void SoyuzListarProgramacionTest()
        {
            List<Programacion> itinerariosAListar;

            //1. Inicializar el objeto de prueba
            Soyuz.ProgramacionesWS.PropuestasSYZClient proxy = new Soyuz.ProgramacionesWS.PropuestasSYZClient();
            //2. Invocar la operacion del objeto de prueba
            itinerariosAListar = proxy.ListarProgramaciones().ToList();
            //3. Validar los valores esperados
            Assert.IsNotNull(itinerariosAListar);
            Assert.AreEqual(6, itinerariosAListar.Count);
        }

        //Testeo consultar programacion con parametros SOYUZ
        [TestMethod]
        public void SoyuzConsultarProgramacionParametrosTest()
        {
            List<Programacion> itinerariosAListar;

            //1. Inicializar el objeto de prueba
            Soyuz.ProgramacionesWS.PropuestasSYZClient proxy = new Soyuz.ProgramacionesWS.PropuestasSYZClient();
            //2. Invocar la operacion del objeto de prueba
            itinerariosAListar = proxy.ConsultarProgramaciones(Convert.ToDateTime("30/03/2014 06:00:00 p.m."), Convert.ToDateTime("02/04/2014 06:00:00 p.m."), "Lima", "Cusco", 33).ToList();
            //3. Validar los valores esperados
            Assert.IsNotNull(itinerariosAListar);
            Assert.AreEqual(35, itinerariosAListar[0].Stock);
        }

        [TestMethod]
        public void SesionCorrectoTest()
        {
            //Prueba de obtencion de cliente via HTTP GET
            HttpWebRequest req = (HttpWebRequest)WebRequest.
                Create("http://localhost:6696/Sesiones.svc/Sesiones/U0001/123456");
            req.Method = "GET";
            HttpWebResponse res = null;

            try
            {
                res = (HttpWebResponse)req.GetResponse();
                StreamReader reader = new StreamReader(res.GetResponseStream());
                string usuarioJson = reader.ReadToEnd();
                JavaScriptSerializer js = new JavaScriptSerializer();
                Usuario usuarioObtenido = js.Deserialize<Usuario>(usuarioJson);

                Assert.AreEqual("Juan", usuarioObtenido.Nombre);
                Assert.AreEqual("Perez", usuarioObtenido.Ape_paterno);
                Assert.AreEqual("Perez", usuarioObtenido.Ape_materno);
            }
            catch (WebException e)
            {
                HttpWebResponse resError = (HttpWebResponse)e.Response;
                StreamReader reader = new StreamReader(resError.GetResponseStream());
                string error = reader.ReadToEnd();

                JavaScriptSerializer js = new JavaScriptSerializer();
                Error errorMessage = js.Deserialize<Error>(error);
                Assert.AreEqual("Usuario/password incorrecto.", errorMessage.MensajeError);
                //string errorMessage = js.Deserialize<string>(error);
                //Assert.AreEqual("El ", errorMessage);

            }

        }

        [TestMethod]
        public void SesionIncorrectaTest()
        {
            //Prueba de obtencion de cliente via HTTP GET
            HttpWebRequest req = (HttpWebRequest)WebRequest.
                Create("http://localhost:6696/Sesiones.svc/Sesiones/U0001/111111");
            req.Method = "GET";
            HttpWebResponse res = null;

            try
            {
                res = (HttpWebResponse)req.GetResponse();
                StreamReader reader = new StreamReader(res.GetResponseStream());
                string usuarioJson = reader.ReadToEnd();
                JavaScriptSerializer js = new JavaScriptSerializer();
                Usuario usuarioObtenido = js.Deserialize<Usuario>(usuarioJson);

                Assert.AreEqual("Juan", usuarioObtenido.Nombre);
                Assert.AreEqual("Perez", usuarioObtenido.Ape_paterno);
                Assert.AreEqual("Perez", usuarioObtenido.Ape_materno);
            }
            catch (WebException e)
            {
                HttpWebResponse resError = (HttpWebResponse)e.Response;
                StreamReader reader = new StreamReader(resError.GetResponseStream());
                string error = reader.ReadToEnd();

                JavaScriptSerializer js = new JavaScriptSerializer();
                Error errorMessage = js.Deserialize<Error>(error);
                Assert.AreEqual("Usuario/password incorrecto.", errorMessage.MensajeError);
                //string errorMessage = js.Deserialize<string>(error);
                //Assert.AreEqual("El ", errorMessage);

            }

        }

        //Testeo Listar todo programacion SOYUZ
        [TestMethod]
        public void RegistrarReservaTest()
        {
            //1. Inicializar el objeto de prueba
            Soyuz.ProgramacionesWS.PropuestasSYZClient proxy = new Soyuz.ProgramacionesWS.PropuestasSYZClient();
            //2. Invocar la operacion del objeto de prueba
            string registro = proxy.RegistrarReserva("SY002","34434556",2);
            //3. Validar los valores esperados
            Assert.AreEqual("SI", registro);
        }

        
                 //Testeo consultar programacion con parametros SOYUZ
        [TestMethod]
        public void RegistroColasTest()
        {
            //List<Programacion> itinerariosAListar;

            //1. Inicializar el objeto de prueba
            ItinerarioWS.ItinerarioClient proxy = new ItinerarioWS.ItinerarioClient();
            //2. Invocar la operacion del objeto de prueba
            string resultado = proxy.RegistrarCola("FL001","12211221",3);
            //3. Validar los valores esperados
            Assert.AreEqual("enviado", resultado);
        }

        


    }
}
